package com.kim.store.config;

import com.kim.store.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.ArrayList;
import java.util.List;

/**
 * 处理器拦截器的注册
 */
/*
  源码解析：
  //将自定义拦截器进行注册
  default void addInterceptors(InterceptorRegistry registry) {}
 */
@Configuration //加载当前的拦截器，并进行注册
public class LoginInterceptorConfigurer implements WebMvcConfigurer{

    //配置拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //创建自定义拦截器对象
        HandlerInterceptor interceptor = new LoginInterceptor();
        //配置白名单:存放在List集合里面
        List<String> patterns = new ArrayList<>();
        patterns.add("/bootstrap3/**");
        patterns.add("/css/**");
        patterns.add("/images/**");
        patterns.add("/js/**");
        patterns.add("/upload/**");
        patterns.add("/web/register.html");
        patterns.add("/web/login.html");
        patterns.add("/web/index.html");
        patterns.add("/web/product.html");
        patterns.add("/user/reg");
        patterns.add("/user/login");
        patterns.add("/district/**");
        patterns.add("/product/**");
       // patterns.add("/upload/**");

        //完成拦截器的注册
        /**
         * addInterceptor():用于注册拦截器
         * addPathPatterns():添加路径参数，表示拦截的路径是什么，此方法接收的是url(相当于黑名单)
         * /** : 代表这个项目下所有的请求都被拦截
         * excludePathPatterns():除了某些路径不阻拦，此方法接收的是List集合(相当于白名单)
         */
        registry.addInterceptor(interceptor)
                .addPathPatterns("/**").excludePathPatterns(patterns);
    }

    /* springboot中配置addResourceHandler和addResourceLocations，
       可以使得可以从磁盘中读取图片、视频、音频等
     */
    //对静态资源的配置
//    @Override
//    public void addResourceHandlers(ResourceHandlerRegistry registry) {
//        registry.addResourceHandler("/upload/**")
//                .addResourceLocations("D:/project/images/upload");
//    }
}
